﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace CashDriver
{
    /// <summary>
    /// Класс содержит настройки кассового аппарата. Настройки сохраняются в файле ККМ.adj
    /// </summary>
    [Serializable]
    public class KKM : ISerializable
    {
        public static KKM Inst
        {
            get
            {
                if (_kkm == null)
                {
                    lock (_syncRoot)
                    {
                        _kkm = new KKM();
                        return _kkm;
                    }
                }
                return _kkm;
            }
        }

        /// <summary>
        /// Пароль пользователя кассы
        /// </summary>
        public int Password { get; set; }

        /// <summary>
        /// Номер чека
        /// </summary>
        public int CheckNumber { get; set; }

        /// <summary>
        /// Делит входную строку на набор строк не превышающих по длине величину заданную в параметре width
        /// </summary>
        /// <param name="list">Результирующий набор строк</param>
        /// <param name="in_str">Входная строка</param>
        /// <param name="width">Длина строки</param>
        public static void SplitOnWidthString(List<string> list, string in_str, int width)
        {
            string str = in_str.Trim();
            if (str.Length > width)
            {
                string s = str.Substring(0, width);
                int idx = s.LastIndexOf(' ');
                if (idx == -1)
                {
                    list.Add(s);
                    SplitOnWidthString(list, str.Substring(width + 1), width);
                }
                else
                { 
                    list.Add(str.Substring(0, idx));
                    SplitOnWidthString(list, str.Substring(idx + 1), width);
                }
            }
            else
                list.Add(str);
        }

        public int WidthCheck { get { return _width; } set { _width = value; } }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            throw new NotImplementedException();
        }

        private KKM() { }
        private static KKM _kkm;
        private static object _syncRoot = new Object();
        private int _width = 32;
    }
}
